package com.young.interfaces.ums.service;

import com.young.interfaces.ums.model.User;
import com.young.interfaces.ums.model.Dept;
import com.young.interfaces.ums.model.Navigate;
import com.young.interfaces.ums.model.Role;
import com.young.interfaces.ums.model.SsoVerifyDTO;

import java.util.Date;
import java.util.List;

/**
 * Created by rookie on 2017/5/11.
 * 统一用户对外接口
 */
public interface IUmsOutService {
    /**
     * 创建资源
     * @param navigate
     */
    void createNavigate(Navigate navigate);
    /**
     * 根据用户ID获取用户包含的资源列表
     * @param userId 用户id
     * @return
     * @throws Exception
     */
    List<Navigate> getNavigateByUserId(String userId);

    /**
     * 根据用户id获取资源树(获取菜单),暂未实现
     * @param userId 用户id
     * @return
     * @throws Exception
     */
    List<Navigate> getNavigateAsTreeByUserId(String userId);

    /**
     * 根据用户id获取用户登录信息
     * @param userId 用户id
     * @return
     * @throws Exception
     */
    User getLoginUserById(String userId);

    /**
     * 验证单点,即验证token合法性
     * @param token 令牌
     * @return
     * @throws Exception
     */
    SsoVerifyDTO verifySSO(String token);

    /**
     * 查询用户上一次登录的时间
     * @param userId 用户id
     * @return
     * @throws Exception
     */
    Date getLastLoginTime(String userId);

    /**
     * 根据组织id获取组织信息
     * @param deptId 组织id
     * @return
     * @throws Exception
     */
    Dept getDeptById(String deptId);

    /**
     * 根据角色id获取角色信息
     * @param roleId 角色id
     * @return
     * @throws Exception
     */
    Role getRoleById(String roleId);

    /**
     * 判断是否存在指定id/account的用户
     * 在创建用户之前做唯一性验证
     * @param userIdOrAccount 用户id或者登陆账号
     * @return
     * @throws Exception
     */
    boolean existUserIdOrAccount(String userIdOrAccount);

    /**
     * 查询用户
     * @param userId 用户id
     * @return
     */
    User getUser(String userId);

    /**
     * 创建用户,供外部调用,id/account/companyId不允许为空
     * @param user 用户信息
     * @return
     * @throws Exception
     */
    boolean insertUser(User user);

    /**
     * 更新用户信息
     * @param user 用户信息
     * @return int 改动的数据条数,-1表示操作失败
     * @throws Exception
     */
    int updateUser(User user);

    /**
     * 删除用户
     * @param userId 用户id
     * @return int 改动的数据条数,-1表示操作失败
     * @throws Exception
     */
    int deleteUser(String userId);

    /**
     * 校验用户是否有权限访问uri
     * @param userId 用户id
     * @param uri uri
     * @return
     */
    boolean canAccessUri(String userId, String uri);
}
